package com.demo.core.dao.base.support;

/**
 * 分页接口
 * 提供分页所需要的基础信息
 * 该接口不依赖Web项目的公共接口
 * 
 * @author ryuu.kk
 *
 */
public interface PageSupport {

	public static final int PAGE_SIZE = 10;
	/**
	 * 分页类型枚举,包含正常分页、短分页、长分页的每页大小
	 * 
	 * @author ryuu.kk
	 */
	public enum Page {
		//1,2,4,8
		normal(1 << 0), short_20(1 << 1), short_50(1 << 2), large_100(1 << 3);
		
		private final int value;
		private final int type;
		Page(int type) {
		this.type = type;
		switch (type) {
			case 1 << 0:
				value = PAGE_SIZE;
				break;
			case 1 << 1:
				value = 20;
				break;
			case 1 << 2:
				value = 50;
				break;
			case 1 << 3:
				value = 100;
				break;
			default:
				value = PAGE_SIZE;
			}
		}
        public int size() {
            return value;
        }
        public int type() {
        	return type;
        }
	}
	
	/**
	 * 返回页面中每页数据大小
	 * @return 每页数据大小
	 */
	int getPageSize();
	
	/**
	 * 是否是分页的第一个
	 * @return 第一页判断
	 */
	boolean isFirst();
	
	/**
	 * 是否是分页的最后一页
	 * @return 最后一页判断
	 */
	boolean isLast();
	
	/**
	 * 返回总页数
	 * @return 总页数
	 */
	int getTotalPage();
	
	/**
	 * 返回分页的当前页号
	 * @return 当前页号
	 */
	int getCurrentPage();
	
	/**
	 * 设置分页的当前页号
	 * @param currentPage 当前页号
	 */
	void setCurrentPage(int currentPage);
	
	/**
	 * 返回数据层提供的高效分页参数对象
	 * @return 分页参数对象
	 */
	SearchArgumentSupport getArgumentSupport();
	
	/**
	 * 设置检索的结果集对象
	 * @param resultSupport 分页检索的结果集对象
	 */
	void setResultSupport(SearchResultSupport<?> resultSupport);
}
